package cn.cnlee.arch.base;


import androidx.lifecycle.MutableLiveData;

import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;

/**
 * Repository抽象基类，主要用来管理视图页所有retrofit2请求和StateView的状态变化
 */
public abstract class AbsRepository {

    private CompositeDisposable mCompositeDisposable;

    /**
     * StateView视图状态
     */
    public MutableLiveData<String> loadState;

    /**
     * 需要全局处理的一些UI事件，如跳转登录界面和软件更新提示框
     */
    public MutableLiveData<Integer> actionData;


    public AbsRepository() {
        loadState = new MutableLiveData<>();
        actionData = new MutableLiveData<>();
    }

    /**
     * 更新stateView视图状态
     *
     * @param state
     */
    protected void postState(String state) {
        if (loadState != null) {
            loadState.postValue(state);
        }
    }

    /**
     *
     */
    public void postAction(int action) {
        if (actionData != null) {
            actionData.postValue(action);
        }
    }


    /**
     * Disposable对象加入管理器
     *
     * @param disposable
     */
    protected void addDisposable(Disposable disposable) {
        if (mCompositeDisposable == null) {
            mCompositeDisposable = new CompositeDisposable();
        }
        mCompositeDisposable.add(disposable);
    }

    /***
     * 清空管理器
     */
    public void unDisposable() {
        if (mCompositeDisposable != null && mCompositeDisposable.isDisposed()) {
            mCompositeDisposable.clear();// clear时网络请求会随即cancel
            mCompositeDisposable = null;
        }
    }
}
